# 从 sqlalchemy 导入 func 函数，用于数据库操作中获取当前时间等功能
from sqlalchemy import func
# 从 app.models 导入数据库实例 db
from app.models import db

class TrainStation(db.Model):
    """
    TrainStation 类表示数据库中的列车站点表，继承自 SQLAlchemy 的 db.Model
    用于存储列车在各个站点的相关信息
    """
    __tablename__: str = 'train_station'

    # 定义列车编号列，作为外键关联到 train 表的 train_no 字段
    # 同时作为联合主键的一部分，添加索引以提高查询效率
    train_no = db.Column(db.String(120), db.ForeignKey('train.train_no'), primary_key=True, index=True)
    # 定义站点名称列，作为外键关联到 station 表的 name 字段
    # 同时作为联合主键的一部分
    station_name = db.Column(db.String(120), db.ForeignKey('station.name'), primary_key=True)

    # 定义车票价格列，使用 Numeric 类型存储，总位数 8 位，小数位 2 位
    price = db.Column(db.Numeric(8, 2))
    # 定义列车到达该站点的时间列，使用 DateTime 类型
    arrival_time = db.Column(db.DateTime)
    # 定义列车从该站点出发的时间列，使用 DateTime 类型
    departure_time = db.Column(db.DateTime)
    # 定义站点在列车路线中的索引列，整数类型，默认值为 0
    index = db.Column(db.Integer, default=0)
    # 定义记录创建时间列，使用 DateTime 类型，默认值为当前时间
    created_at = db.Column(db.DateTime, default=func.now())
    # 定义记录更新时间列，使用 DateTime 类型，默认值为当前时间
    updated_at = db.Column(db.DateTime, default=func.now())

    # 定义与 Station 模型的关联关系，通过 backref 可以从 Station 访问相关的 TrainStation 记录
    station = db.relationship('Station', backref=db.backref('train_stations'))
    # 定义与 Train 模型的关联关系，通过 backref 可以从 Train 访问相关的 TrainStation 记录
    train = db.relationship('Train', backref=db.backref('train_stations'))
